﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>Try - 语法 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The Try statement guards one or more code lines against runtime errors and exceptions thrown by the 报错 statement." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>Try</h1>

<p>守护一个或多个语句(函数或表达式) 不受由 <a href="Throw.htm">报错</a> 语句抛出的运行时错误和异常的影响.</p>

<pre class="Syntax"><span class="func">Try</span> <i>Statement</i></pre>
<pre class="Syntax" style="line-height: 100%"><span class="func">Try</span>
{
    <i>Statements</i>
}</pre>
<h2 id="Remarks">备注</h2>
<p><em>try</em> 语句后常跟着<a href="Block.htm">区块</a> - 括在大括号中的一个或多个语句(函数或表达式). 如果仅需执行单个语句, 那么此语句可以和 <em>try</em> 放在同一行, 也可以在下一行, 并且可以省略大括号. 要指定仅在 <em>try</em> 捕获错误时执行的代码, 请使用 <a href="Catch.htm">捕获</a> 语句.</p>
<p><a href="Throw.htm">报错</a> 语句或程序在运行遇到错误时会抛出异常. 当 try 区块或由其调用的函数抛出异常时, 将进行下列操作:</p>
<ul>
  <li>如果该区块有相应的 <a href="Catch.htm">捕获</a> 语句, 则继续执行该语句.</li>
  <li>如果没有 捕获 语句但有 <a href="Finally.htm">收尾</a> 语句, 则执行该语句并在结束后自动再次抛出异常.</li>
  <li>如果 捕获 语句和 收尾 语句都没有, 则继续执行 try 区块外的下一行.</li>
</ul>
<p>如果在没有 try 区块执行的情况下引发异常, 则会显示错误消息, 并且当前线程退出.</p>
<p>可以选择将 <a href="Block.htm#otb">One True Brace(OTB) 样式</a>与 <em>try</em> 语句一起使用. 例如:</p>
<pre>try {
    ...
} 捕获 e {
    ...
}</pre>

<h2 id="Related">相关</h2>
<p><a href="Catch.htm">捕获</a>, <a href="Throw.htm">报错</a>, <a href="Finally.htm">收尾</a>, <a href="Block.htm">区块</a>, <a href="OnError.htm">在报错时</a></p>

<h2 id="Examples">示例</h2>
<div class="ex" id="ex_basic">
<p><a href="#ex_basic">#1</a>: try/catch/throw 的基本概念.</p>
<pre>try  <em>; 尝试执行的代码.</em>
{
    HelloWorld
    MakeToast
}
<a href="Catch.htm">捕获</a> e  <em>; 处理由上面区块产生的首个错误/异常.</em>
{
    信息框 "An 异常 was thrown!`nSpecifically: " e
    <a href="Exit.htm">退出</a>
}

HelloWorld()  <em>; 总是成功.</em>
{
    信息框 "Hello, world!"
}

MakeToast()  <em>; 总是失败.</em>
{
    <em>; 立即跳到 try 区块的错误处理程序:</em>
    <a href="Throw.htm">报错</a> 内_此函数 &quot; is not implemented, sorry&quot;
}
</pre>
</div>

<div class="ex" id="ex_el">
<p><a href="#ex_el">#2</a>: 处理内置函数的基本错误.</p>
<pre>try
{
    <em>; 下列语句尝试备份某些指定类型的文件:</em>
    文件复制 内_我的文档 "\*.txt", "D:\Backup\Text documents"
    文件复制 内_我的文档 "\*.doc", "D:\Backup\Text documents"
    文件复制 内_我的文档 "\*.jpg", "D:\Backup\Photos"
}
捕获
{
    信息框("There was a problem while backing the files up!",, 16)
    退出应用
}
</pre>
</div>

<div class="ex" id="ex_com">
<p><a href="#ex_com">#3</a>: 处理 COM 错误.</p>
<pre>try
{
    obj := <a href="ComObjCreate.htm">组件对象创建</a>(&quot;<a href="http://msdn.microsoft.com/en-us/library/aa227633(v=vs.60).aspx">ScriptControl</a>&quot;)
    obj.ExecuteStatement('信息框 &quot;This is embedded VBScript&quot;')
    obj.InvalidMethod() <em>; 这行会产生一个运行时错误.</em>
}
捕获 e
{
    <em>; 关于 e 对象的更多细节, 请参阅 <a href="Throw.htm#Exception">异常</a>.</em>
    信息框(&quot;异常 thrown!`n`nwhat: &quot; e.what &quot;`nfile: &quot; e.file
        . &quot;`nline: &quot; e.line &quot;`nmessage: &quot; e.message &quot;`nextra: &quot; e.extra,, 16) 
}
</pre>
</div>

<div class="ex" id="ex_nesting">
<p><a href="#ex_nesting">#4</a>: 嵌套的 try-catch 语句</p>
<pre>try Example1 <em>; 单个语句可以和 Try 语句放在同一行.</em>
捕获 e
    信息框 &quot;Example1() threw &quot; e

Example1()
{
    try Example2
    捕获 e
    {
        如果 (e = 1)
            报错 e <em>; 重新抛出这个异常, 这样调用者可以捕获它.</em>
        否则
            信息框 &quot;Example2() threw &quot; e
    }
}

Example2()
{
    报错 随机数(1, 2)
}</pre>
</div>

</body>
</html>